<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<!-- saved from url=(0014)about:internet -->
<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<title>
	HomeUX Documentation
</title>

<link rel="stylesheet" href="_CodeDoc.css" />

<style type="text/css">
.Reference
{
	color: #003399;
}
</style>

</head>

<body id="DocBrowserTopic">

<div class="TopicHeader">
<!--
	<div class="Supertitle_">
		HomeUX Documentation
	</div>
-->
	HomeUX Documentation
</div>

<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
<div class="Summary">

<p>HomeUX is an <a href="#CodePlex">open-source</a> home control software
featuring a Silverlight-based touch screen user interface.</p>

<p><b>Note</b>&nbsp; Use of HomeUX is governed by the Microsoft Public License (Ms-PL)
(<a href="http://homeux.codeplex.com/license">http://homeux.codeplex.com/license</a>).</p>

<p>This documentation is intended for technical hobbyists and/or software developers.  HomeUX is
a playground for home control development, and isn't intended to be deployed by consumers.</p>

<p>Page contents:</p>
<ul>
	<li><a href="#Intro">Introduction to HomeUX</a></li>
	<li><a href="#CodePlex">HomeUX on CodePlex</a></li>
	<li><a href="#Using">Using HomeUX</a></li>
	<li><a href="#Drivers">HomeUX Driver Collection</a></li>
</ul>

<p>See also:</p>
<ul>
	<li><a href="ClientDoc/Default.htm">HomeUX Client Code Documentation</a></li>
	<li><a href="ServerDoc/Default.htm">HomeUX Server Code Documentation</a></li>
</ul>

</div>

<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
<div class="SectionHeader">
	Introduction to HomeUX<a name="Intro"></a>
</div>
<div id="DocTopic">
<div class="Section">

	<p>HomeUX is software that provides a unified, touch screen based user interface for
	controlling equipment in a home.  The "UX" in "HomeUX" means "user experience", which is a
	term that encompasses all aspects of how a user interacts with software.</p>
	
	<p>User experience is the reason why HomeUX exists.  It's not about "automating" your house
	(which is why I prefer the term "home control" to "home automation", though admittedly the two
	are basically synonyms).  For example, the point isn't "turn on the coffee pot at 7AM".  To be
	honest, the main reason HomeUX exists is in response to the proliferation of <i>really bad</i>
	user interfaces that exist in the home.  Just look at the array of remote controls you need to
	control audio/video equipment, with lots of small buttons with tiny, inscrutable labels.
	Remote controls need to be the way they are because a better UX would be much more expensive.
	(In fact, one solution to the problem of bad remote control UI is to buy a good-quality
	touch screen-based remote control.  That's a fine solution, and it solves part of the problem
	addressed by HomeUX, but it's not the solution presented here.)</p>

	<p>Another example of a bad user interface: a typical thermostat that controls both heating and
	air conditioning.  Perhaps the old mechanical interface was best: move a knob or lever to the
	temperature below which which the heat should turn on, and another to indicate the temperature
	above which the air conditioner should start.  In contrast, many modern thermostats require you
	to press a "mode" button, then up/down buttons to adjust the first temperature, then "mode"
	again (<i>quickly</i>, because it will time out), then up/down again to adjust the second
	temperature.  Often the same "mode" button also serves to change the operational mode of the
	system, e.g. AC-only or heat-only or both.  Can you imagine modern professional computer
	software getting away with an interface like that?  And there are many more examples.</p>

	<p>Higher-end houses have an additional issue: lots of equipment to control.  For example, a
	large "great room" (combination of living and dining room, and possibly kitchen) may have quite
	a few lights, and possibly motorized blinds, a raised/lowered TV or projection screen, a gas
	fireplace, etc.  Each one of these can have its own button or knob, which has the advantage of
	simplicity, but it's inconvenient to run around a room pressing buttons, and nobody likes a
	couple of feet of wall switches.  A better user experience organizes this functionality into
	logical groupings, perhaps arranged by task (e.g. "watching a movie") instead of by hardware
	function.  (A partial solution is to use a system like
	<a href="http://www.lutron.com/homeworks/overview.asp">Lutron&#174;
	HomeWorks&#174;</a>&mdash;in fact I use such a system in conjuction with HomeUX.  The Lutron
	hardware does the "heavy lifting" of lighting control, and the wall-mounted keypads work even
	when HomeUX doesn't.)</p>

	<p>The HomeUX project was started by me (Rick Ledoux) as a way of experimenting with home
	control user experience.  And it is an experiment: HomeUX is the second major version of
	software I wrote to control the house I had built in 1999, and I still consider it to be a
	prototype.  In fact, I built my house, in large part, to be a prototyping platform for home
	control experimentation: I specifically selected many systems (lighting, HVAC, security, A/V,
	etc.) to be as computer-controllable as possible (e.g. via RS-232 serial ports).  I recognize
	this isn't typical&mdash;home control more often uses hardware like
	<a href="http://en.wikipedia.org/wiki/X10_(industry_standard)">X10&#174;</a> or
	<a href="http://en.wikipedia.org/wiki/INSTEON">INSTEON&#174;</a>&mdash;which are probably more
	practical, and definitely more economical), but I wanted to see what was possible if you push
	the boundaries a bit.  (By the way, there's no reason HomeUX can't control X10 or
	INSTEON&mdash;but at the moment I don't use those system so I haven't written drivers.)</p>

	<p>One key choice I made up-front was to use touch screens that are Windows&#174;-based
	secondary monitors.  This somewhat defies conventional wisdom&mdash;PCs are seen as complex
	systems that can fail too often, and reliability is key in home control&mdash;but on the other
	hand PCs are cheap and ubiquitous.  I knew I'd have several PCs in my house anyway; attaching a
	secondary monitor for use as a HomeUX touch screen is pretty simple.  And the tools and
	techologies available on Windows for developing user interfaces are top-notch.  (Disclosure:
	I'm a Microsoft employee, and you won't see my biting the hand that feeds me.  :-)  However,
	HomeUX is a personal project.)  When Silverlight 2 came along, it seemed ideal to me: one thing
	I'd learned from my earlier version of my software is that it's very helpful to be able to
	quickly access the home control software from any laptop in the house without complicated
	setup, and by building the UI in Silverlight it's as easy as navigating to a web page.
	(When run on a touch screen there's an additional small component that helps the UI runs
	full-screen on the correct monitor, even after a reboot.  Surviving Windows Updates is a key
	requirement of HomeUX.)  Also, I added encryption to the HomeUX client/protocol so that I
	should be able to securely control my home from anywhere on the web&mdash;but so far I've been
	too paranoid to open up a firewall port, except for brief testing.</p>

	<p>So, how has my experience been with Windows PC reliability?  Well, PCs do fail, but in
	truth I've found that fixing or replacing a PC&mdash;a true commodity&mdash;is a much simpler
	matter than fixing or replacing a custom proprietary piece of equipment.  For example, I'm so
	fearful about my IR blaster failing&mdash;and then discovering that the company that makes it
	has gone out of business&mdash;that I bought a couple of spares (and they're not cheap).  In
	comparison, I'm not worried that the PC platform will "go out of business".</p>

	<p>Here's a simplified picture of how HomeUX is configured in my house:</p>

	<p><img src="EndToEnd.png"></p>

	<p>What's in the picture:</p>

	<ul>

		<li>The touch screens I use are actually usually sold as point-of-sale terminals.  (The
			trick was finding small, cleanly designed units that look good in a residence.)  These
			are just LCD screens with a resistive touch itnerface.  (These aren't multi-touch,
			though I've tested with a Windows 7 multi-touch laptop and it works.)  For the most
			part, touching the screen is equivalent to clicking with a mouse.  Of course, from a
			software perspective, "touch UI" and "mouse UI" need to be completely different to be
			successful&mdash;that was a key design principle of HomeUX.</li>

		<li>The client PCs aren't dedicated to HomeUX; I just connect touch screens to existing
			PCs.  In fact, one of the client PCs also doubles as the server PC.</li>

		<li>All client PCs communicate with a single server PC over the home network.  The server
			runs the HomeUX Windows service, which keeps track of the global state of the system
			and is responsible for communicating with controlled equipment.  The server PC doesn't
			need to be particularly special hardware; in my case I've used Windows Server 2003,
			Windows Vista, and Windows 7 as servers at various times.  In fact, it's a good idea to
			set up a second machine (perhaps just one of the clients) that can be used as a HomeUX
			server if the first machine fails.  (Fail-over is currently manual, but all you have to
			do is start the HomeUX service on the second machine.)  To keep configuration simple,
			<a href="http://en.wikipedia.org/wiki/Internet_Information_Services">IIS</a> isn't
			required&mdash;I use
			<a href="http://msdn.microsoft.com/en-us/library/system.net.httplistener.aspx">HttpListener</a>
			instead.</li>

		<li>HomeUX includes separate music server software, which is basically a wrapper around
			Media Player.  The server software runs either as a tray icon or a Windows service; it
			plays music through an external amplifier.  When used with the corresponding music
			client components, you can choose music to play using a touch screen.  The music server
			software can run on the same computer as the HomeUX server, or even a client.</li>

		<li>Much of the equipment in my house was purchased specifically because it could be
			controlled by a computer, and the ubiquitous interface is RS-232.  It's not convenient
			to require the the equipment be placed within RS-232 cable range of the HomeUX server;
			more precisely, I don't want to require that the server be in a specific location (see
			the comment about fail-over above).  So, I use a couple of "serial hubs", each of which
			have an Ethernet port plus a number of serial ports; the server connects to the hubs
			over the network.  I place the hubs near the equipment to be controlled&mdash;in my
			case, that's two locations (my mechanical room and my A/V closet).</li>

	</ul>
</div>
</div>

<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
<div class="SectionHeader">
	HomeUX on CodePlex<a name="CodePlex"></a>
</div>
<div id="DocTopic">
<div class="Section">

	<p>HomeUX is available for download on <a href="http://HomeUX.CodePlex.com/">CodePlex</a>.
	I'm not currently looking for additional project contributors&mdash;HomeUX is published for
	these reasons:</p>

	<ol>

		<li>It's one example of how to do touch-screen UI in Silverlight.  I figured it might be
			useful to share what I've learned so far.  (Again, note that HomeUX currently doesn't
			exploit multi-touch features of Windows.)</li>

		<li>It shows one approach to home control.  This is really a secondary goal for publishing
			HomeUX&mdash;I'm realistic enough to understand that home control is still a pretty
			niche application.  And, in order for anyone to actually <i>use</i> HomeUX in their
			home, they'd almost certainly have to write new HomeUX drivers.  That's a pretty big
			investment.</li>

	</ol>

	<p>So, for anyone except me, HomeUX is basically just a big ol' sample app.</p>

	<p>Currently, HomeUX is available in source code form only (except for a demo version on
	the companion web site, <a href="http://www.HomeUX.org">HomeUX.org</a>).  My assumption is that
	if you want to play with HomeUX you need to be a developer.  Specifically, a C# developer.</p>

</div>
</div>

<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
<div class="SectionHeader">
	Using HomeUX<a name="Using"></a>
</div>
<div id="DocTopic">
<div class="Section">

	<p>In case you're one of the very few people who might want to build, install, and play with
	HomeUX yourself, here's what you need to know:</p>

	<ol>

		<li>Download the source code and build it.  It currently requires Visual Studio 2008 and
			Silverlight 3.</li>

		<li>Update Server\App.config to reflect the hardware you're using.  You may be able to use
			some of the <a href="#Drivers">existing HomeUX drivers</a> but most likely you'll need
			to write your own&mdash.  see the <a href="ServerDoc/Default.htm">server code
			documentation</a>**.

		<li>The Client directory contains the sample HomeUX client.  You should customize this to
			correspond to your hardware.  See the <a href="ClientDoc/Default.htm">client code
			documentation</a>**.

	</ol>

	<p><b>** PLEASE NOTE!</b>&nbsp; HomeUX documentation is currently under construction, and many
	topics are still blank.  I'm slowly filling in the documentation, over the next few months.</p>

</div>
</div>

<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
<div class="SectionHeader">
	HomeUX Driver Collection<a name="Drivers"></a>
</div>
<div id="DocTopic">
<div class="Section">

	<p>HomeUX has its own driver model.  A HomeUX driver is a managed-code assembly that's loaded
	by the HomeUX Windows service (in user mode).  See <a href="ServerDoc/Default.htm">server code
	documentation</a> for more information.</p>

	<p>The following table lists the HomeUX drivers that are currently included in the HomeUX
	distribution.  The "Simulator" column indicates if there is a hardware simulator
	available&mdash;a simulator is a library which behaves much like the real hardware (in many
	cases implementing a
	<a href="ServerDoc/Default.htm#HomeUX.Utilities.VirtualSerialPort.Class.htm">virtual serial
	port</a> interface) but which doesn't control real hardware.  (Simulators are useful for
	debugging and for demonstrating HomeUX user interface without requiring connection to real
	hardware.)</p>

	<p><b>NOTE</b>&nbsp; In addition to the documentation currently being incomplete, I haven't
	even finished writing drivers for all my own equipment.  The topics below (even the ones with
	incomplete documentation) reflect the drivers that are implemented so far.</p>

    <table class="Grid Indent" style="width: auto; margin-top: 3pt;">
			<col class="Column1_" />
			<col class="Column2_" />
			<col class="Column3_" />
			<tr class="Header_">
				<td class="Header1_">Driver Name</td>
				<td class="Header1_">Description</td>
				<td class="Header1_">Simulator?</td>
			</tr>
			<tr>
				<td>
					<a href="ServerDoc/Drivers/Aggregator/Default.htm">AggregatorDriver</a>
				</td>
				<td>
					Under construction.
				</td>
				<td>
					No
				</td>
			</tr>
			<tr>
				<td>
					<a href="ServerDoc/Drivers/Asp/Default.htm">AspDriver</a>
				</td>
				<td>
					Controls one or more Sound Control Technologies ASP Audio Matrix 8x8 devices
					connected together to implement an N-input, N-output audio router.
				</td>
				<td>
					Yes
				</td>
			</tr>
			<tr>
				<td>
					<a href="ServerDoc/Drivers/Aquos/Default.htm">AquosDriver</a>
				</td>
				<td>
					Controls a Sharp Aquos LC-52D65U, LC-42D65U, or LC-46D65U LCD TV.
				</td>
				<td>
					Yes
				</td>
			</tr>
			<tr>
				<td>
					<a href="ServerDoc/Drivers/Jds/Default.htm">JdsDriver</a>
				</td>
				<td>
					Controls a JDS Technologies IR-XP2 "InfraRed Xpander", which transmits IR
					(infrared remote control) codes.
				</td>
				<td>
					Yes
				</td>
			</tr>
			<tr>
				<td>
					<a href="ServerDoc/Drivers/Lutron/Default.htm">LutronDriver</a>
				</td>
				<td>
					Under construction.
				</td>
				<td>
					Yes
				</td>
			</tr>
			<tr>
				<td>
					<a href="ServerDoc/Drivers/MusicPlayer/Default.htm">MusicPlayerDriver</a>
				</td>
				<td>
					Under construction.
				</td>
				<td>
					Yes
				</td>
			</tr>
			<tr>
				<td>
					<a href="ServerDoc/Drivers/Panasonic/Default.htm">PanasonicDriver</a>
				</td>
				<td>
					Accesses the telephone log of a Panasonic D816 Digital Super Hybrid System
					telephone PBX.
				</td>
				<td>
					Yes
				</td>
			</tr>
			<tr>
				<td>
					<a href="ServerDoc/Drivers/Sunfire/Default.htm">SunfireDriver</a>
				</td>
				<td>
					Under construction.
				</td>
				<td>
					Yes
				</td>
			</tr>
    </table>

</div>
</div>

<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
<div class="TopicFooter">
</div>

<div class="PageFooter">
<p>See <a href="http://www.HomeUX.org">http://www.HomeUX.org</a> for more information about HomeUX.</p>
</div>

</body>

</html>

